home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 November: Tool Chest / Dev.CD Nov 98 TC.toast / Sample Code / Files / MoreIsBetter / MIB-Libraries / Sources / MoreAppleEvents.cp < prev    next >
Encoding:
Text File  |  1998-09-25  |  2.7 KB  |  122 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        MoreAppleEvents.cp
  3.  
  4.     Contains:    
  5.  
  6.     Written by:    Pete Gontier (PCG)
  7.  
  8.     Copyright:    Copyright (c) 1998 Apple Computer, Inc.
  9.  
  10.     Change History (most recent first):
  11.  
  12.          <2>     6/16/98    PCG     CreateProcessTarget works with nil PSN
  13.          <1>     6/16/98    PCG     initial checkin
  14. */
  15.  
  16.  
  17. #include "MorePrefix.h"
  18. #include "MoreAppleEvents.h"
  19. #include "MoreProcesses.h"
  20.  
  21. pascal OSErr SetReplyErrorNumber (OSErr errToReport, AppleEvent *reply)
  22. {
  23.     OSErr err = noErr;
  24.  
  25.     if (reply->dataHandle)
  26.     {
  27.         if (!MoreAssert (reply->descriptorType == typeAppleEvent))
  28.             err = paramErr;
  29.         else
  30.             err = AEPutParamPtr (reply,keyErrorNumber,typeShortInteger,&errToReport,sizeof(errToReport));
  31.     }
  32.  
  33.     return err;
  34. }
  35.  
  36. pascal OSErr SenderIsFinder (const AppleEvent *event, Boolean *isFinder)
  37. {
  38.     if (!MoreAssert (event && isFinder))                            return paramErr;
  39.     if (!MoreAssert (event->descriptorType == typeAppleEvent))        return paramErr;
  40.     if (!MoreAssert (event->dataHandle))                            return paramErr;
  41.  
  42.     OSErr                    err = noErr;
  43.     DescType                actualType;
  44.     ProcessSerialNumber        senderPSN;
  45.     Size                    actualSize;
  46.  
  47.     err = AEGetAttributePtr (event, keyAddressAttr, typeProcessSerialNumber, &actualType,
  48.         (Ptr) &senderPSN, sizeof (senderPSN), &actualSize);
  49.     if (MoreAssert (err == noErr))
  50.     {
  51.         if (!MoreAssert (actualType == typeProcessSerialNumber))
  52.             err = paramErr;
  53.         else if (!MoreAssert (actualSize == sizeof (senderPSN)))
  54.             err = paramErr;
  55.         else
  56.         {
  57.             ProcessInfoRec processInfo;
  58.  
  59.             if (!(err = GetSomeProcessInfo (&senderPSN,&processInfo)))
  60.             {
  61.                 *isFinder = (processInfo.processSignature == 'MACS' && processInfo.processType == 'FNDR');
  62.             }
  63.         }        
  64.     }
  65.  
  66.     return err;
  67. }
  68.  
  69. pascal OSErr CreateProcessTarget (ProcessSerialNumber *psn, AEDesc *target)
  70. {
  71.     ProcessSerialNumber self;
  72.  
  73.     if (!psn)
  74.     {
  75.         psn = &self;
  76.  
  77.         self.lowLongOfPSN        = kNoProcess;
  78.         self.highLongOfPSN        = kCurrentProcess;
  79.     }
  80.  
  81.     return AECreateDesc (typeProcessSerialNumber,psn,sizeof(*psn),target);
  82. }
  83.  
  84. pascal OSErr CreateSimpleAppleEvent
  85.     (AEEventClass eventClass, AEEventID eventID, ProcessSerialNumber *psn, AppleEvent *result)
  86. {
  87.     OSErr err = noErr;
  88.  
  89.     AEDesc target;
  90.  
  91.     if (!(err = CreateProcessTarget (psn,&target)))
  92.     {
  93.         OSErr err2;
  94.  
  95.         err = AECreateAppleEvent (eventClass,eventID,&target,kAutoGenerateReturnID,kAnyTransactionID,result);
  96.  
  97.         err2 = AEDisposeDesc (&target);
  98.         if (!err) err = err2;
  99.     }
  100.  
  101.     return err;
  102. }
  103.  
  104. pascal OSErr SimplySendAppleEvent (const AppleEvent *appleEvent, AppleEvent *reply)
  105. {
  106.     OSErr err = noErr;
  107.  
  108.     AESendMode aeSendMode = kAEAlwaysInteract | kAECanSwitchLayer;
  109.  
  110.     if (reply)
  111.     {
  112.         aeSendMode |= kAEWaitReply;
  113.  
  114.         reply->descriptorType    = typeNull;
  115.         reply->dataHandle        = nil;
  116.     }
  117.  
  118.     err = AESend (appleEvent, reply, aeSendMode, kAENormalPriority, kAEDefaultTimeout, nil, nil);
  119.  
  120.     return err;
  121. }
  122.